package com.yupi.maker.meta;

import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.json.JSONUtil;

/**
 * @version 1.0
 * @Author moresuo
 * @Date 2024/9/10 15:44
 * @注释 读取meta文件信息到对象上
 */
public class MetaManager {

    private static volatile Meta meta;

    /**
     * 双检锁获取单例对象
     * @return
     */
    public static Meta getMetaObject(){
        if(meta==null){//如果meta不为空直接返回单例对象
            //多个线程进入
            synchronized (MetaManager.class){//只能有一个线程执行
                if(meta==null){//初始化之前必须要判断是否被其他线程初始化过了，否则每个线程都会执行一遍
                    meta=intiMeta();
                }
            }
        }
        return meta;
    }

    /**
     * 将元信息文件转为对象
     * @return
     */
    private static Meta intiMeta(){
        //加载resource目录下的文件
        String metaStr = ResourceUtil.readUtf8Str("meta.json");
        meta = JSONUtil.toBean(metaStr, Meta.class);
        //校验配置文件，填充默认值
        MetaValidator.doValidAndFill(meta);
        return meta;
    }

}
